简述

wrk 和 apache benchmark(ab)同属于性能测试工具, 但是比 ab 功能更加强大,还可以支持lua脚本来创建复杂的测试场景。

wrk 的一个很好的特性就是能用很少的线程压出很大的并发量, 原因是它使用了一些操作系统特定的高性能 I/O 机制, 比如 select, epoll, kqueue 等。 其实它是复用了 redis 的 ae 异步事件驱动框架. 确切的说 ae 事件驱动框架并不是 redis 发明的, 而是来自于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知.

安装

准备条件

  1. 确保linux上已经安装了 make工具 (sudo apt-get install make)
  2. GCC 编译环境(sudo apt-get install build-essential)

安装

  • 安装 luajit

      sudo apt-get install build-essential libssl-dev git
      git clone http://luajit.org/git/luajit-2.0.git
      cd luajit
      make && sudo make install
    
  • 然后下载wrk的源码

      git clone https://github.com/wg/wrk.git
      cd wrk
    
  • 在上一步下载的 luajit 代码中,有一个 jit 文件夹,需要复制到 wrk 目录下

  • 执行make

执行编译后,生成wrk文件

    make
    # move the executable to somewhere in your PATH
    sudo cp wrk /usr/local/bin

使用方法

执行简单的命令

    ./wrk -t4 -c1000 -d10s -T30s --latency http://www.baidu.com

执行结果:

简要说明下wrk的参数的含义

  • -t 线程数
  • -c 连接数
  • -d 测试持续时间
  • -T 超时时间
  • –latency 响应的分布时间

响应结果的参数含义:

  • Latency:响应时间

  • Req/Sec:每秒请求数量,也就是并发能力

  • Avg:平均

  • Max:最大

  • Stdev:标准差

  • +/- Stdev: 正负一个标准差占比

  • Latency: 响应的分布时间

  • 注意:模拟测试的时候,一般线程数不宜过多,核数的2到4倍足够了。 多了反而因为线程切换过多造成效率降低, 因为 wrk 不是使用每个连接一个线程的模型, 而是通过异步网络 I/O 提升并发量。 所以网络通信不会阻塞线程执行,这也是 wrk 可以用很少的线程模拟大量网路连接的原因。

支持lua脚本

这块内容只是简单了解了下,还是很强大,等用到后,在做笔记吧~

  • 用人不在于如何减少人的短处, 而在于如何发挥人的长处。 –彼得.德鲁克 (管理学之父)